# -*- coding: utf8 -*-
from common.jabber import Jabber
import os
import sys
import threading
import MySQLdb

class Server():
	def __init__(self):
		self.jabber = Jabber()
		if self.jabber.xmppConnect(host='esperanza',usuario='servidor',password='servidor',puerto=5222) == False:
			print "Error de conexión"
			exit(1)
		self.jabber.registerHandler('message',self.recibirMensaje)

		self.loggedUsers = []

		# Conexión con mysql
		self.db = MySQLdb.connect(host='localhost',user='root',passwd='',db='modeloempresarial')
		self.dbcursor = self.db.cursor()
	def recibirMensaje(self, con, event):
		typ = event.getType() # tipo de evento, puede ser útil después
		fromjid = event.getFrom().getStripped() # remitente en forma separada también puede ser útil
		try:
			if event.getBody() == None:
				sys.stdout.write("Receiving a blank body message...\n")
				return 0
			else:	
				sys.stdout.write(event.getBody() + '\n')
		except:
			pass
		# Analizador de comandos
		mensaje = event.getBody()
		mensajeSeparado = mensaje.split() # Separar por espacios el mensaje

		if mensajeSeparado[0] == 'EXIT':
			if mensajeSeparado[1] == 'NOW':
				exit(0)
		if mensajeSeparado[0] == 'LOGIN': # LOGIN usuario password
			if len(mensajeSeparado) != 3:
				print "wrong lenght"
				return
			usuario = mensajeSeparado[1]
			password = mensajeSeparado[2]
			# Validar usuario y password en la BDD
			sql = "select usuario,password,jid from usuarios where usuario='" + usuario + "' and password='" + password + "';"
			self.dbcursor.execute(sql)
			resultado = self.dbcursor.fetchall()	
			if len(resultado) == 0:
				self.jabber.sendMessage(event.getFrom(),'LOGIN ERROR')
			else:
				print resultado[0]
				self.jabber.sendMessage(event.getFrom(),'LOGIN SATISFACTORIO')
				# if user jid is not in list then add it
				try:
					self.loggedUsers.index(resultado[0][2])
				except ValueError: 
					self.loggedUsers.append(resultado[0][2])
				print self.loggedUsers

		if mensajeSeparado[0] == 'CHAT': #　public: CHAT ALL mensaje     private: CHAT nick mensaje
			if len(mensajeSeparado) < 3: 
				print "wrong length"
				return	
			msg = ''
			for m in mensajeSeparado[2:]: # vamos a juntar lo ya separado
				msg += m + ' '
			msg = msg[:-1]
			if mensajeSeparado[1] == 'ALL': # public chat
				for jid in self.loggedUsers: # manda mensaje a todos los conectados
					if fromjid != jid:
						self.jabber.sendMessage(jid,msg)
			else: # private chat
				self.jabber.sendMessage(mensajeSeparado[1],msg)
	def runJabber(self):
		self.jabber.run()

def main():
	servidor = Server()
	servidor.runJabber()
if __name__ == "__main__":
	main()
